package com.ehome.manage.module.utils.process.process;

import com.ehome.manage.module.utils.process.context.BaseProcessContext;
import com.ehome.manage.module.utils.process.node.ProcessNode;

/**
 * 流程定义
 *
 * @author xiaxinye
 */
public interface ProcessDefinition<C extends BaseProcessContext> {

    /**
     * 返回 业务流程名称
     *
     * @return 业务流程名称
     */
    String getName();

    /**
     * 构建流程上下文
     *
     * @return 流程上下文
     */
    C createContext();

    /**
     * 根据节点名称获取节点实例
     *
     * @param nodeName 节点实例
     * @return 找到的节点实例
     */
    ProcessNode<C> getNodeByName(String nodeName);

    /**
     * 该流程节点日志是否启用
     *
     * @return true: 启用 | false: 关闭
     */
    boolean nodeLogEnabled();

}
